#include<bits/stdc++.h> 
using namespace std;
//  一个用户在微博上可能有很多粉丝，并且也可以关注很多人。因此会建立一个关注关系的社会网
//	络。当一个用户在微博上发帖子，他的粉丝就可以看到并且转发他的帖子，并且也可以被转发者
//	的粉丝转发。现在给定一个社会网络，需要计算给定L层非直接粉丝层数，某一个特定用户发帖的
//	最大潜在转发数。
//1.第一行输入2个正整数N≤1000，表示用户数；L≤6，表示非直接粉丝的层数。因此，用户编号从
//	1~N。
//2.然后跟着N行，每一行都是 M[i]  user_list[i]。其中M[i]是用户i的关注数，然后后面会跟M个
//	关注的用户id。每个人无法关注自己。
//3.最后给定一个正整数K，然后跟着K个查询的用户id
//4.对于每个用户id，需要输出一个最大潜在转发数。每个人对每个帖子都只能转发一次。
//5.BFS, 层次遍历
vector<int> neighbors[1005];
short visited[1005];
int N;
int forwardCal(int q, int L){
	int ans = 0;
	//memset(visited, 0, sizeof(visited));
	fill(visited+1, visited+N+1, 0);
	queue<int> Q;
	Q.push(q);
	visited[q] = 1;
	int now = q;
	while(!Q.empty()&&L!=0){
		int front = Q.front();
		Q.pop();
		vector<int>::iterator it;
		for(it = neighbors[front].begin();it!=neighbors[front].end();it++){
			if(visited[*(it)]==0){
				visited[*(it)] = 1;
				Q.push(*(it));
				ans ++;
			}
		}
		if(front == now){
			L--;
			now = Q.back();
		} 
	}
	return ans;
}
int main(){
	int L;
	cin>>N>>L;
	for(int i = 1;i<=N;i++){
		int M;
		cin>>M;
		for(int j = 0;j<M;j++){
			int t;
			cin>>t;
			neighbors[t].push_back(i);
		}
	}
	int K;
	cin>>K;
	for(int i = 0;i<K;i++){
		int q;
		cin>>q;
		cout<<forwardCal(q, L)<<endl;
	}
	return 0;
}